#pragma once

// Dependencies
#include "Point3.h"
#include "Quaternion.h"
#include "Vector3.h"

namespace Core {
	template<class T>
	class Transform3_t {
	public: // Typedefs
		typedef T value_type;
		typedef Transform3_t<T> this_type;

	public: // Constructors
		Transform3_t( 
			const Point3_t<T>& pos = Point3_t<T>(0,0,0), 
			const Vector3_t<T> scale = Vector3_t<T>(1,1,1), 
			Quaternion4_t<T> ang = Quaternion4_t<T>(0, 0, 0, 1)
		);

	public: // Members
		Point3_t<T> position;
		Vector3_t<T> scale;
		Quaternion4_t<T> orientation;
	};

	// Typedefs available to the Core namespace
	typedef Transform3_t<float> Transform3f;
	typedef Transform3_t<double> Transform3;
}